import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;


public class PlayGame extends JFrame {

	private JPanel contentPane;
	static PlayGame frame ;
	JLabel lblro;
	private JTextField txtloai;
	static int vt;
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					frame = new PlayGame();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public PlayGame() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 700, 500);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		// Sự kiện cho rổ di chuyển theo chuột
		contentPane.addMouseMotionListener(new MouseMotionAdapter() {
			@Override
			public void mouseMoved(MouseEvent event) {
				double a=event.getPoint().getX();
				lblro.setIcon(null);
				contentPane.add(lblro);
				lblro = new JLabel();
				try {
					BufferedImage trung=ImageIO.read(new File("src\\Images\\Ro.png"));
					ImageIcon ictrung=new ImageIcon(trung.getScaledInstance(60,60, trung.SCALE_SMOOTH));
					lblro.setIcon(ictrung);
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				lblro.setBounds((int)a-30, 393,(int) ( contentPane.WIDTH-a-30), (int)(contentPane.HEIGHT-393));
				contentPane.add(lblro);
				lblro.setSize(60,60);
				contentPane.add(lblro);
			}
		});
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblTime = new JLabel("th\u1EDDi gian");
		lblTime.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblTime.setBounds(37, 11, 54, 25);
		contentPane.add(lblTime);
		
		JLabel lblsotrung = new JLabel("S\u1ED1 Tr\u1EE9ng");
		lblsotrung.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblsotrung.setBounds(205, 11, 54, 25);
		contentPane.add(lblsotrung);
		
		JLabel lblsl = new JLabel("C\u00F2n l\u1EA1i");
		lblsl.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblsl.setBounds(340, 11, 54, 25);
		contentPane.add(lblsl);
		
		lblro = new JLabel();
		try {
			BufferedImage trung=ImageIO.read(new File("src\\Images\\Ro.png"));
			ImageIcon ictrung=new ImageIcon(trung.getScaledInstance(60,60, trung.SCALE_SMOOTH));
			lblro.setIcon(ictrung);
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		lblro.setBounds(300, 393, contentPane.WIDTH-300, contentPane.HEIGHT-320);
		contentPane.add(lblro);
		lblro.setSize(60,60);
		contentPane.add(lblro);
		
		JLabel lblToaDo = new JLabel("Nh\u1EADp Lo\u1EA1i th\u00EAm v\u00E0o");
		lblToaDo.setBounds(425, 17, 120, 14);
		contentPane.add(lblToaDo);
		
		txtloai = new JTextField();
		txtloai.setFocusable(true);
		//Sự kiện nhập chữ
		txtloai.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent arg0) {
				//nhập chữ g xuất hiện gà
				if(arg0.getKeyCode()==arg0.VK_G)
				{
					TaoGc(1);
					txtloai.setText("");
				}
				//nhập chữ v xuất hiện vịt
				if(arg0.getKeyCode()==arg0.VK_V)
				{
					TaoGc(2);
					txtloai.setText("");
				}
				//nhập chữ n xuất hiện ngan
				if(arg0.getKeyCode()==arg0.VK_N)
				{
					TaoGc(3);
					txtloai.setText("");
				}
				//các trường hợp còn lại thì bỏ qua
				else 
					txtloai.setText("");
			}
		});
		txtloai.setBounds(542, 14, 86, 20);
		contentPane.add(txtloai);
		txtloai.setColumns(10);
		
		JLabel lblbg = new JLabel();
		lblbg.setBounds(0, 0, 0, 0);
		try {
			BufferedImage bg=ImageIO.read(new File("src\\Images\\bg.jpg"));
			ImageIcon icbg=new ImageIcon(bg.getScaledInstance(700,500, bg.SCALE_SMOOTH));
			lblbg.setIcon(icbg);
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}		
		contentPane.add(lblbg);
		
		
	}
	//hàm tạo gia cầm có tham số truyền vào để giúp nhận biết nên tạo loại nào
	public void TaoGc(final int loai)
	{
		//tạo thread tạo gia cầm di chuyển
		Thread Gc=new Thread(){
			public void run(){				
				JLabel lblga = new JLabel();
				lblga.setBounds(250, 40,250, (int)(contentPane.HEIGHT-40));
				lblga.setSize(60,60);
				contentPane.add(lblga);	
				JLabel lblvit = new JLabel();
				lblvit.setBounds(250, 40,250, (int)(contentPane.HEIGHT-40));
				lblvit.setSize(60,60);
				contentPane.add(lblvit);
				JLabel lblngan = new JLabel();
				lblngan.setBounds(250, 40,250, (int)(contentPane.HEIGHT-40));
				lblngan.setSize(60,60);
				contentPane.add(lblngan);	
				//vòng lặp giúp gia cầm di chuyển liên thục tới khi trò chơi kết thúc
				while(true)
				{
					//vòng lặp for giúp gc di chuyển sang trái
						for(int i=0;i<690;i+=2){
							vt=i;
							try {
								Thread.sleep(10);
							} catch (InterruptedException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
							lblga.setIcon(null);lblvit.setIcon(null);lblngan.setIcon(null);
							// điều kiện if giúp nhận biết nên tạo loại nào
							if(loai==1)
							{
								try {
									BufferedImage ga=ImageIO.read(new File("src\\Images\\ga.png"));
									ImageIcon icga=new ImageIcon(ga.getScaledInstance(60,60, ga.SCALE_SMOOTH));
									lblga.setIcon(icga);
								} catch (IOException e1) {
									// TODO Auto-generated catch block
									e1.printStackTrace();
								}
								lblga.setBounds(i-30, 40,(int)(contentPane.WIDTH-i-30), (int)(contentPane.HEIGHT-40));
								contentPane.add(lblga);
								lblga.setSize(60,60);
								contentPane.add(lblga);		
							}
							if(loai==2)
							{
								try {
									BufferedImage gc=ImageIO.read(new File("src\\Images\\vit.png"));
									ImageIcon icvit=new ImageIcon(gc.getScaledInstance(60,60, gc.SCALE_SMOOTH));
									lblvit.setIcon(icvit);
								} catch (IOException e1) {
									// TODO Auto-generated catch block
									e1.printStackTrace();
								}
								lblvit.setBounds(i-30, 40,(int)(contentPane.WIDTH-i-30), (int)(contentPane.HEIGHT-40));
								contentPane.add(lblvit);
								lblvit.setSize(60,60);
								contentPane.add(lblvit);		
							}
							if(loai==3)
							{
								try {
									BufferedImage ngan=ImageIO.read(new File("src\\Images\\ngan.png"));
									ImageIcon icngan=new ImageIcon(ngan.getScaledInstance(60,60, ngan.SCALE_SMOOTH));
									lblngan.setIcon(icngan);
								} catch (IOException e1) {
									// TODO Auto-generated catch block
									e1.printStackTrace();
								}
								lblngan.setBounds(i-30, 40,(int)(contentPane.WIDTH-i-30), (int)(contentPane.HEIGHT-40));
								contentPane.add(lblngan);
								lblngan.setSize(60,60);
								contentPane.add(lblngan);		
							}
					}

						//vòng lặp for giúp gc di chuyển sang phải
						for(int i=690;i>=0;i-=2){
							vt=i;
							try {
								Thread.sleep(10);
							} catch (InterruptedException e) {
								e.printStackTrace();
							}
							lblga.setIcon(null);lblvit.setIcon(null);lblngan.setIcon(null);
							if(loai==1)
							{
								try {
									BufferedImage ga=ImageIO.read(new File("src\\Images\\ga.png"));
									ImageIcon icga=new ImageIcon(ga.getScaledInstance(60,60, ga.SCALE_SMOOTH));
									lblga.setIcon(icga);
								} catch (IOException e1) {
									e1.printStackTrace();
								}
								lblga.setBounds(i-30, 40,(int)(contentPane.WIDTH-i-30), (int)(contentPane.HEIGHT-40));
								contentPane.add(lblga);
								lblga.setSize(60,60);
								contentPane.add(lblga);		
							}
							if(loai==2)
							{
								try {
									BufferedImage gc=ImageIO.read(new File("src\\Images\\vit.png"));
									ImageIcon icvit=new ImageIcon(gc.getScaledInstance(60,60, gc.SCALE_SMOOTH));
									lblvit.setIcon(icvit);
								} catch (IOException e1) {
									// TODO Auto-generated catch block
									e1.printStackTrace();
								}
								lblvit.setBounds(i-30, 40,(int)(contentPane.WIDTH-i-30), (int)(contentPane.HEIGHT-40));
								contentPane.add(lblvit);
								lblvit.setSize(60,60);
								contentPane.add(lblvit);		
							}
							if(loai==3)
							{
								try {
									BufferedImage ngan=ImageIO.read(new File("src\\Images\\ngan.png"));
									ImageIcon icngan=new ImageIcon(ngan.getScaledInstance(60,60, ngan.SCALE_SMOOTH));
									lblngan.setIcon(icngan);
								} catch (IOException e1) {
									e1.printStackTrace();
								}
								lblngan.setBounds(i-30, 40,(int)(contentPane.WIDTH-i-30), (int)(contentPane.HEIGHT-40));
								contentPane.add(lblngan);
								lblngan.setSize(60,60);
								contentPane.add(lblngan);		
							}					
				}	
						
			//Gọi hàm giúp gc đẻ trứng
						trung(vt);
			}
			
		}
		};	
		//cho thread vừa tạo hoạt động 
		Gc.start();
	}
	
	
	//viết hàm cho đẻ trứng: làm cho trứng hoặc phân rơi ngẫu nhiên.
	public void trung(final int td)
	{
		while(true)
		{
			Thread detrung=new Thread(){
				public void run(){
					try {
						//tạo hàm sinh số ngẫu nhiên từ 0->1
						double a=Math.random();
						String egg;
						//nếu số ngẫu nhiên lớ hơn 0.2 thì sinh ra trứng
						if(a>0.2)
							egg="src\\Images\\egg.png";
						//ngược lại thì sinh ra phân
						else 
							egg="src\\Images\\shit.png";
						JLabel lblegg=new JLabel();
						contentPane.add(lblegg);
						lblegg.setSize(30,30);
						contentPane.add(lblegg);
						// vòng lặp for giúp cho trứng(phân) rơi từ trên xuống
						for(int i=40;i<690;i+=2){
							try {
									Thread.sleep(30);
							} catch (InterruptedException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
							lblegg.setIcon(null);
							try {
								BufferedImage trung=ImageIO.read(new File(egg));
								ImageIcon ictrung=new ImageIcon(trung.getScaledInstance(30,30, trung.SCALE_SMOOTH));
								lblegg.setIcon(ictrung);
							} catch (IOException e1) {
										// TODO Auto-generated catch block
										e1.printStackTrace();
									}
							lblegg.setBounds(td, i-30,contentPane.HEIGHT-td, (int)(contentPane.HEIGHT-i-30));
							contentPane.add(lblegg);
							lblegg.setSize(60,60);
							contentPane.add(lblegg);		
						}	
					}
					catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			};
			//cho thread đẻ trứng hoạt động
			detrung.run();
		}
	}
}
